package work20241126_27;

import java.util.Scanner;

/**
 * @author zdl
 * @date 2024/11/26
 */
public class Demo18 {
    public static void main(String[] args) {
        //在已排序的数组中使用二分查找来查找指定元素。
        /**
         * 工作原理
         * 假设有一个已排序的数组 [1, 3, 5, 7, 9, 11, 13]，我们要查找元素 7。
         *
         * 初始范围：设定查找范围为整个数组，即左边界 left = 0，右边界 right = 数组长度 - 1。
         * 找到中间元素：计算中间位置 mid = (left + right) / 2，如果 arr[mid] == target，则直接返回中间元素的下标。
         * 根据大小调整范围：
         * 如果 arr[mid] < target，则目标值在右半部分，调整左边界 left = mid + 1。
         * 如果 arr[mid] > target，则目标值在左半部分，调整右边界 right = mid - 1。
         * 重复步骤 2 和 3，直到找到目标元素，或者左右边界交错（表示目标元素不存在）。
         */
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        int target = sc.nextInt();
        int[] arr = {1,3,5,7,9,11,13};
        int left = 0;
        int right = arr.length -1;
        while (left <= right){
            int mid = (left + right) / 2;
            if (arr[mid] == target){
                System.out.println(mid);
                break;
            }else if (arr[mid] < target){
                left = mid + 1;
            }else {
                right = mid -1;
            }
        }

    }
}
